/**
 * 
 */
package gui;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

import actions.Main;

/**
 * Crea la interfaz para los botones de acción del radio.
 */
public class PanelBotones extends JPanel implements ActionListener {

	// ------------------------------------------------------------------------
	// Constantes
	// ------------------------------------------------------------------------

	/**
	 * Constante predeterminada para la serialización.
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Texto que se despliega en el botón para indicar avance en las emisoras.
	 */
	private static final String ADELANTE = "▲";

	/**
	 * Texto que se despliega en el botón para indicar regresar en las emisoras
	 */
	private static final String ATRAS = "▼";

	/**
	 * Texto que aparece en el botón para cambiar la frecuencia FM / AM.
	 */
	private static final String CAMBIAR_FRECUENCIA = "FM / AM";

	/**
	 * Texto para cambiar la etiqueta de apagar encender el radio.
	 */
	private String estadoActualRadio = "ON";

	// -----------------------------------------------------------------
	// Atributos
	// -----------------------------------------------------------------

	/**
	 * Clase con los botones para guardar las emisoras.
	 */
	private PanelPresets presets = new PanelPresets();

	// ------------------------------------------------------------------------
	// Atributos de la interfaz
	// ------------------------------------------------------------------------

	/**
	 * Botón para avanzar en el dial hacia atras.
	 */
	private JButton btnAtras;

	/**
	 * Botón para avanzar en el dial haca delante.
	 */
	private JButton btnAdelante;

	/**
	 * Botón para cambiar la frecuencia de AM a FM y viceversa.
	 */
	private JButton btnFrecuencia;

	/**
	 * Botón para encender o apagar el radio.
	 */
	private JButton btnPwrRadio;

	// ------------------------------------------------------------------------
	// Constructor
	// ------------------------------------------------------------------------
	/**
	 * Contruye la interfaz con los comandos de acción del radio.
	 */
	public PanelBotones() {
		// Distribución de los componentes en el panel
		setLayout(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		c.weightx = 0.5;
		c.weighty = 0.5;
		c.fill = GridBagConstraints.BOTH;

		// ▲
		btnAdelante = new JButton(ADELANTE); // hacia arriba
		btnAdelante.addActionListener(this);
		c.gridx = 7;
		c.gridy = 0;
		add(btnAdelante, c);

		// ▼
		btnAtras = new JButton(ATRAS);
		btnAtras.addActionListener(this);
		c.gridx = 7;
		c.gridy = 1;
		add(btnAtras, c);

		// FM / AM
		btnFrecuencia = new JButton(CAMBIAR_FRECUENCIA);
		btnFrecuencia.addActionListener(this);
		c.gridx = 7;
		c.gridy = 2;
		add(btnFrecuencia, c);

		// ON / OFF
		btnPwrRadio = new JButton(estadoActualRadio);
		btnPwrRadio.addActionListener(this);
		c.gridx = 7;
		c.gridy = 3;
		add(btnPwrRadio, c);

		actualizarEstadoBotones();
	}

	// ------------------------------------------------------------------------
	// Métodos
	// ------------------------------------------------------------------------
	/**
	 * Permite hablitar o desabiliar los botones del radio según el estado del
	 * mismo.
	 */
	private void actualizarEstadoBotones() {
		boolean estado = Main.radio.estaEncendido();;
		
		btnAtras.setEnabled(estado);
		btnAdelante.setEnabled(estado);
		btnFrecuencia.setEnabled(estado);
		presets.botonesActivados(estado);
		if (estado)
			estadoActualRadio = "OFF";
		else
			estadoActualRadio = "ON";

		// Cambia el texto del botón de encendido.
		btnPwrRadio.setText(estadoActualRadio);
	}

	/**
	 * Ejecuta una acción según el botón que haya sido presionado
	 * @param e Es el evento de clic sobre uno de los botones
	 */
	public void actionPerformed(ActionEvent e) {
		String command = e.getActionCommand();
		if (command.equals(ADELANTE))
			Main.radio.cambiarEmisora(true);
		else if (command.equals(ATRAS))
			Main.radio.cambiarEmisora(false);
		else if (command.equals(CAMBIAR_FRECUENCIA))
			Main.radio.cambiarFrecuencia();
		else if (command.equals(estadoActualRadio)) {
			Main.radio.energia();
			actualizarEstadoBotones();
		}
		PanelDisplay.actualizarTexto();
	}
}